package cn.com.aiton.common.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 二进制工具
 * by HYQ
 * Created by Administrator on 2016/11/4.
 */
public class BinaryUtils {

    /**
     * 将一个二进制的int数值转换成
     * int数组：返回该二进制中为1的位的序号
     * 例如： 10010  return--> {2,5}
     * @param i
     * @return
     */
    public static List<Integer> intConvertToIntList(int i){

        List<Integer> list = new ArrayList<>();

        for (int j = 0; j < 32; j++){
            if(get(i, j)==1){
                list.add(j+1);
            }else{
                list.add(0);
            }
        }

        return list;
    }

    /**
     * 将Plan中月份数据组合成数组的形式
     * 一年有12个月
     * 一个short型占用二个字节，也就是16位
     * 这里只取前12位数据，并组合成集合
     *
     * @param i
     * @return
     */
    public static List<Integer> shortConvertToIntList(short i){

        List<Integer> list = new ArrayList<>();

        for(int j=0;j<16;j++){
            if((i & (0x1 << j)) >> j==1){
                list.add(j+1);
            }else{
                list.add(0);
            }
        }

        return list;
    }

    /**
     * 将Plan中月份数据组合成数组的形式
     * 一年有12个月
     * 一个int型占用四个字节，也就是32位
     * 这里只取前12位数据，并组合成集合
     *
     * @param i
     * @return
     */
    public static List<Integer> convertToIntList(Integer i){

        List<Integer> list = new ArrayList<>();

        for(int j=0;j<16;j++){
            if((i & (0x1 << j)) >> j==1){
                list.add(j+1);
            }else{
                list.add(0);
            }
        }

        return list;
    }
    /**
     * @param num:要获取二进制值的数
     * @param index:倒数第一位为0，依次类推
     */
    public static int get(int num, int index){
        return (num & (0x1 << index)) >>> index;
    }
}
